1. 09 May, 2022 1 commit
    • Alexey Kardashevskiy's avatar
      powerpc/64: Add UADDR64 relocation support · 151322c2
      Alexey Kardashevskiy authored
      commit d7997691
      
       upstream.
      
      When ld detects unaligned relocations, it emits R_PPC64_UADDR64
      relocations instead of R_PPC64_RELATIVE. Currently R_PPC64_UADDR64 are
      detected by arch/powerpc/tools/relocs_check.sh and expected not to work.
      Below is a simple chunk to trigger this behaviour (this disables
      optimization for the demonstration purposes only, this also happens with
      -O1/-O2 when CONFIG_PRINTK_INDEX=y, for example):
      
        \#pragma GCC push_options
        \#pragma GCC optimize ("O0")
        struct entry {
                const char *file;
                int line;
        } __attribute__((packed));
        static const struct entry e1 = { .file = __FILE__, .line = __LINE__ };
        static const struct entry e2 = { .file = __FILE__, .line = __LINE__ };
        ...
        prom_printf("e1=%s %lx %lx\n", e1.file, (unsigned long) e1.file, mfmsr());
        prom_printf("e2=%s %lx\n", e2.file, (unsigned long) e2.file);
        \#pragma GCC pop_options
      
      This adds support for UADDR64 for 64bit. This reuses __dynamic_symtab
      from the 32bit code which supports more relocation types already.
      
      Because RELACOUNT includes only R_PPC64_RELATIVE, this replaces it with
      RELASZ which is the size of all relocation records.
      Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Cc: Nathan Chancellor <nathan@kernel.org>
      Link: https://lore.kernel.org/r/20220309061822.168173-1-aik@ozlabs.ru
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      151322c2
  2. 31 Jan, 2020 1 commit
  3. 30 Oct, 2019 1 commit
  4. 30 May, 2019 1 commit
  5. 28 Apr, 2017 1 commit
  6. 22 Sep, 2016 1 commit
  7. 23 Mar, 2015 1 commit