diff options
| author | Eugen Wissner <belka@caraus.de> | 2024-10-08 17:29:08 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2024-10-09 23:37:58 +0200 |
| commit | 87f183baad01f2b572f5f9051895b5876a56dd4c (patch) | |
| tree | 638bc5449ae12125d2d943b003212424e0bb66ba /lib/Language/Elna/RiscV/ElfWriter.hs | |
| parent | 699cc8684b1571d2501bac2c8bdf461127a420a1 (diff) | |
| download | elna-87f183baad01f2b572f5f9051895b5876a56dd4c.tar.gz | |
Add branch relocation type
Diffstat (limited to 'lib/Language/Elna/RiscV/ElfWriter.hs')
| -rw-r--r-- | lib/Language/Elna/RiscV/ElfWriter.hs | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/Language/Elna/RiscV/ElfWriter.hs b/lib/Language/Elna/RiscV/ElfWriter.hs index a83aca3..d3b0e94 100644 --- a/lib/Language/Elna/RiscV/ElfWriter.hs +++ b/lib/Language/Elna/RiscV/ElfWriter.hs @@ -41,7 +41,7 @@ import Language.Elna.Object.Elf ) import System.IO (Handle) import qualified Language.Elna.Architecture.RiscV as RiscV -import qualified Data.Text.Encoding as Text.Encoding +import qualified Data.Text.Encoding as Text import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Trans.State (get) import Language.Elna.RiscV.CodeGenerator (Statement(..)) @@ -238,7 +238,7 @@ riscv32Elf code objectHandle = text result = ( encoded <> encoded' , relocations <> relocations' - , ElfHeaderResult (names <> labelName <> "\0") (Vector.snoc symbols newEntry) + , ElfHeaderResult (names <> Text.encodeUtf8 labelName <> "\0") (Vector.snoc symbols newEntry) , definitions' ) in encodeAsm shndx result rest' @@ -248,18 +248,21 @@ riscv32Elf code objectHandle = text let offset = fromIntegral $ LazyByteString.length encoded unresolvedRelocation = case instruction of RiscV.RelocatableInstruction _ instructionType - | RiscV.Higher20 _ symbolName <- instructionType + | RiscV.RHigher20 _ symbolName <- instructionType -> Just -- R_RISCV_HI20 - $ UnresolvedRelocation (Text.Encoding.encodeUtf8 symbolName) offset 26 - | RiscV.Lower12I _ _ _ symbolName <- instructionType + $ UnresolvedRelocation (Text.encodeUtf8 symbolName) offset 26 + | RiscV.RLower12I _ _ _ symbolName <- instructionType -> Just -- R_RISCV_LO12_I - $ UnresolvedRelocation (Text.Encoding.encodeUtf8 symbolName) offset 27 - | RiscV.Lower12S symbolName _ _ _ <- instructionType + $ UnresolvedRelocation (Text.encodeUtf8 symbolName) offset 27 + | RiscV.RLower12S symbolName _ _ _ <- instructionType -> Just -- R_RISCV_LO12_S - $ UnresolvedRelocation (Text.Encoding.encodeUtf8 symbolName) offset 28 + $ UnresolvedRelocation (Text.encodeUtf8 symbolName) offset 28 + | RiscV.RBranch symbolName _ _ _ <- instructionType + -> Just -- R_RISCV_BRANCH + $ UnresolvedRelocation (Text.encodeUtf8 symbolName) offset 16 RiscV.CallInstruction symbolName -> Just -- R_RISCV_CALL_PLT - $ UnresolvedRelocation (Text.Encoding.encodeUtf8 symbolName) offset 19 + $ UnresolvedRelocation (Text.encodeUtf8 symbolName) offset 19 RiscV.BaseInstruction _ _ -> Nothing chunk = ByteString.Builder.toLazyByteString $ RiscV.instruction instruction @@ -270,7 +273,7 @@ riscv32Elf code objectHandle = text , addDefinition unresolvedRelocation definitions ) in encodeInstructions result - | otherwise = (encoded, relocations, Vector.drop 1 instructions, definitions) + | otherwise = (encoded, relocations, instructions, definitions) addDefinition (Just (UnresolvedRelocation symbolName _ _)) = HashSet.insert symbolName addDefinition Nothing = id |
