[PowerPC64] Don't mark module data as static
Fixes panic when loading ipfw.ko and if_epair.ko built with modern compiler. Similar to arm64 and riscv, when using a modern compiler (!gcc4.2), code generated tries to access data in the wrong location, causing kernel panic (data storage interrupt trap) when loading if_epair and ipfw. Issue was reproduced with kernel/module compiled using gcc8 and clang8. It affects both ELFv1 and ELFv2 ABI environments. PR: 232387 Submitted by: alfredo.junior_eldorado.org.br Reported by: Mark Millard Reviewed by: jhibbits Differential Revision: https://reviews.freebsd.org/D20461
This commit is contained in:
parent
4ae6e084f0
commit
e2edff4167
@ -273,7 +273,8 @@ extern struct sx vnet_sxlock;
|
||||
/* struct _hack is to stop this from being used with static data */
|
||||
#define VNET_DEFINE(t, n) \
|
||||
struct _hack; t VNET_NAME(n) __section(VNET_SETNAME) __used
|
||||
#if defined(KLD_MODULE) && (defined(__aarch64__) || defined(__riscv))
|
||||
#if defined(KLD_MODULE) && (defined(__aarch64__) || defined(__riscv) \
|
||||
|| defined(__powerpc64__))
|
||||
/*
|
||||
* As with DPCPU_DEFINE_STATIC we are unable to mark this data as static
|
||||
* in modules on some architectures.
|
||||
|
@ -85,7 +85,8 @@ extern uintptr_t dpcpu_off[];
|
||||
/* struct _hack is to stop this from being used with the static keyword. */
|
||||
#define DPCPU_DEFINE(t, n) \
|
||||
struct _hack; t DPCPU_NAME(n) __section(DPCPU_SETNAME) __used
|
||||
#if defined(KLD_MODULE) && (defined(__aarch64__) || defined(__riscv))
|
||||
#if defined(KLD_MODULE) && (defined(__aarch64__) || defined(__riscv) \
|
||||
|| defined(__powerpc64__))
|
||||
/*
|
||||
* On some architectures the compiler will use PC-relative load to
|
||||
* find the address of DPCPU data with the static keyword. We then
|
||||
|
Loading…
Reference in New Issue
Block a user