-- This file is part of Bindings-bfd.
--
-- Copyright (C) 2010 Michael Nelson
--
-- Bindings-bfd is free software: you can redistribute it and/or modify
-- it under the terms of the GNU Lesser General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- Bindings-bfd is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU Lesser General Public License for more details.
-- You should have received a copy of the GNU Lesser General Public License
-- along with Bindings-bfd. If not, see .
module Bindings.Bfd.LinkOrder where
import Foreign.Marshal
import Foreign.Ptr
import Foreign.Storable
import {-# SOURCE #-} Bindings.Bfd.Section
#include
#include
type LinkOrder = Ptr LinkOrder'
data LinkOrder' = Section Section
instance Storable LinkOrder' where
sizeOf _ = (#size struct bfd_link_order)
alignment = sizeOf
pokeByteOff buf off val
| off == (#offset struct bfd_link_order, u.indirect.section) =
(#poke struct bfd_link_order, u.indirect.section) buf $ unLinkOrder'Section val
| otherwise = error "LinkOrder.pokeByteOff otherwise"
unLinkOrder'Section
:: LinkOrder'
-> Section
unLinkOrder'Section (Section s) = s
mk
:: Section
-> IO LinkOrder
mk sect =
do
p <- malloc :: IO LinkOrder
setSection p sect
return p
setSection
:: LinkOrder
-> Section
-> IO ()
setSection lo sect = pokeByteOff lo (#offset struct bfd_link_order, u.indirect.section) $ Section sect