Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from torvalds:master #80

Merged
merged 69 commits into from
Jun 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
c69cb1d
dm zoned: fix uninitialized pointer dereference
damien-lemoal Jun 8, 2020
7b23774
dm zoned: assign max_io_len correctly
Jun 15, 2020
39495b1
dm writecache: correct uncommitted_block when discarding uncommitted …
LenovoOpenLab Jun 12, 2020
a143e17
dm writecache: skip writecache_wait when using pmem mode
LenovoOpenLab Jun 12, 2020
da89962
dm ioctl: use struct_size() helper in retrieve_deps()
GustavoARSilva Jun 17, 2020
e003443
docs: device-mapper: add dm-ebs.rst to an index file
mchehab Jun 15, 2020
b38c0ad
dm zoned: Fix metadata zone size check
kawasaki Jun 18, 2020
415c79e
dm: update original bio sector on Zone Append
morbidrsa Jun 19, 2020
3ee3957
dm zoned: Fix random zone reclaim selection
damien-lemoal Jun 19, 2020
f2cd9a5
dm zoned: Fix reclaim zone selection
kawasaki Jun 19, 2020
d35bd76
dm writecache: add cond_resched to loop in persistent_memory_claim()
Jun 19, 2020
7e4773f
powerpc/fsl_booke/32: Fix build with CONFIG_RANDOMIZE_BASE
Jun 13, 2020
c1ed175
powerpc/kvm/book3s64: Fix kernel crash with nested kvm & DEBUG_VIRTUAL
kvaneesh Jun 11, 2020
2acc5ca
xprtrdma: Prevent dereferencing r_xprt->rx_ep after it is freed
chucklever Jun 15, 2020
2d97f46
xprtrdma: Use re_connect_status safely in rpcrdma_xprt_connect()
chucklever Jun 15, 2020
f423f75
xprtrdma: Clean up synopsis of rpcrdma_flush_disconnect()
chucklever Jun 15, 2020
c487eb7
xprtrdma: Clean up disconnect
chucklever Jun 15, 2020
7b2182e
xprtrdma: Fix handling of RDMA_ERROR replies
chucklever Jun 15, 2020
87676cf
arm64: vdso: Disable dwarf unwinding through the sigreturn trampoline
willdeacon Jun 22, 2020
a39060b
arm64: compat: Allow 32-bit vdso and sigpage to co-exist
willdeacon Jun 22, 2020
8e411be
arm64: compat: Always use sigpage for sigreturn trampoline
willdeacon Jun 22, 2020
2d07196
arm64: compat: Remove 32-bit sigreturn code from the vDSO
willdeacon Jun 22, 2020
4dc9b28
arm64: Depend on newer binutils when building PAC
broonie Jun 19, 2020
b772f07
io_uring: fix io_sq_thread no schedule when busy
fengidri Jun 23, 2020
49a3b0e
arm64: vdso: Only pass --no-eh-frame-hdr when linker supports it
willdeacon Jun 24, 2020
e56404e
arm64: vdso: Don't use gcc plugins for building vgettimeofday.c
a13xp0p0v Jun 24, 2020
2d21889
arm64: Don't insert a BTI instruction at inner labels
jpbrucker Jun 24, 2020
f4617be
arm64: kpti: Add KRYO{3, 4}XX silver CPU cores to kpti safelist
Jun 24, 2020
cb944f0
kselftest: arm64: Remove redundant clean target
broonie Jun 24, 2020
0b8eb62
block: release bip in a right way in error path
cgxu519 Jun 24, 2020
4fea243
nvme: set initial value for controller's numa node
Jun 16, 2020
635333e
nvme-pci: override the value of the controller's numa node
Jun 16, 2020
d4ec47f
nvme-pci: initialize tagset numa value to the value of the ctrl
Jun 16, 2020
610c823
nvme-tcp: initialize tagset numa value to the value of the ctrl
Jun 16, 2020
1b4ad7a
nvme-loop: initialize tagset numa value to the value of the ctrl
Jun 16, 2020
032a996
nvme-rdma: assign completion vector correctly
Jun 23, 2020
3b4b197
nvme: fix possible deadlock when I/O is blocked
sagigrimberg Jun 24, 2020
489dd10
nvme-multipath: fix deadlock between ana_work and scan_work
anton-lb Jun 24, 2020
e164471
nvme: don't protect ns mutation with ns->head->lock
sagigrimberg Jun 24, 2020
d8a22f8
nvme-multipath: fix deadlock due to head->lock
anton-lb Jun 24, 2020
c312446
nvme-multipath: fix bogus request queue reference put
sagigrimberg Jun 24, 2020
9d71b34
kdb: Re-factor kdb_printf() message write code
b49020 Jun 4, 2020
e885728
kdb: Check status of console prior to invoking handlers
b49020 Jun 4, 2020
2a78b85
kdb: Make kdb_printf() console handling more robust
b49020 Jun 4, 2020
cd664b0
io_uring: fix hanging iopoll in case of -EAGAIN
isilence Jun 25, 2020
d60b5fb
io_uring: fix current->mm NULL dereference on exit
isilence Jun 25, 2020
8dfe804
arm64: perf: Report the PC value in REGS_ABI_32 mode
jma123456 May 11, 2020
1b52671
Merge branch 'nvme-5.8' of git://git.infradead.org/nvme into block-5.8
axboe Jun 25, 2020
108447f
arm64: Add KRYO{3,4}XX silver CPU cores to SSB safelist
Jun 25, 2020
a0fc3b3
riscv: Add -fPIC option to CFLAGS_vgettimeofday.o
VincentZWC Jun 23, 2020
d0a5fdf
clk: sifive: allocate sufficient memory for struct __prci_data
VincentZWC Jun 23, 2020
e93b327
riscv: Add extern declarations for vDSO time-related functions
VincentZWC Jun 23, 2020
e05d57d
riscv: Fixup __vdso_gettimeofday broke dynamic ftrace
guoren83 Jun 23, 2020
896066a
selftests/powerpc: Fix build failure in ebb tests
harish-24 Jun 25, 2020
b7ade38
sunrpc: fixed rollback in rpc_gssd_dummy_populate()
vaverin Jun 1, 2020
4659ed7
nfs: Fix memory leak of export_path
Jun 12, 2020
8b04013
pNFS/flexfiles: Fix list corruption if the mirror count changes
Jun 22, 2020
d03727b
NFSv4 fix CLOSE not waiting for direct IO compeletion
Jun 24, 2020
89a3c9f
SUNRPC: Properly set the @subbuf parameter of xdr_buf_subsegment()
chucklever Jun 25, 2020
5946d1f
kdb: Switch to use safer dbg_io_ops over console APIs
b49020 Jun 4, 2020
440ab9e
kgdb: Avoid suspicious RCU usage warning
dianders Jun 2, 2020
8530684
Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/…
torvalds Jun 27, 2020
3b6ab10
Merge tag 'riscv-for-linus-5.8-rc3' of git://git.kernel.org/pub/scm/l…
torvalds Jun 27, 2020
21d2f68
Merge tag 'powerpc-5.8-4' of git://git.kernel.org/pub/scm/linux/kerne…
torvalds Jun 27, 2020
6116dea
Merge tag 'kgdb-5.8-rc3' of git://git.kernel.org/pub/scm/linux/kernel…
torvalds Jun 27, 2020
5e8eed2
Merge tag 'for-5.8/dm-fixes' of git://git.kernel.org/pub/scm/linux/ke…
torvalds Jun 27, 2020
9b8d020
Merge tag 'block-5.8-2020-06-26' of git://git.kernel.dk/linux-block
torvalds Jun 27, 2020
ab0f247
Merge tag 'io_uring-5.8-2020-06-26' of git://git.kernel.dk/linux-block
torvalds Jun 27, 2020
4e99b32
Merge tag 'nfs-for-5.8-2' of git://git.linux-nfs.org/projects/anna/li…
torvalds Jun 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Documentation/admin-guide/device-mapper/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Device Mapper
dm-clone
dm-crypt
dm-dust
dm-ebs
dm-flakey
dm-init
dm-integrity
Expand Down
4 changes: 2 additions & 2 deletions arch/arm64/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -1518,9 +1518,9 @@ config ARM64_PTR_AUTH
default y
depends on !KVM || ARM64_VHE
depends on (CC_HAS_SIGN_RETURN_ADDRESS || CC_HAS_BRANCH_PROT_PAC_RET) && AS_HAS_PAC
# GCC 9.1 and later inserts a .note.gnu.property section note for PAC
# Modern compilers insert a .note.gnu.property section note for PAC
# which is only understood by binutils starting with version 2.33.1.
depends on !CC_IS_GCC || GCC_VERSION < 90100 || LD_VERSION >= 233010000
depends on LD_IS_LLD || LD_VERSION >= 233010000 || (CC_IS_GCC && GCC_VERSION < 90100)
depends on !CC_IS_CLANG || AS_HAS_CFI_NEGATE_RA_STATE
depends on (!FUNCTION_GRAPH_TRACER || DYNAMIC_FTRACE_WITH_REGS)
help
Expand Down
6 changes: 0 additions & 6 deletions arch/arm64/include/asm/linkage.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
* instead.
*/
#define BTI_C hint 34 ;
#define BTI_J hint 36 ;

/*
* When using in-kernel BTI we need to ensure that PCS-conformant assembly
Expand Down Expand Up @@ -43,11 +42,6 @@
SYM_START(name, SYM_L_WEAK, SYM_A_NONE) \
BTI_C

#define SYM_INNER_LABEL(name, linkage) \
.type name SYM_T_NONE ASM_NL \
SYM_ENTRY(name, linkage, SYM_A_NONE) \
BTI_J

#endif

/*
Expand Down
3 changes: 3 additions & 0 deletions arch/arm64/include/asm/mmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@

typedef struct {
atomic64_t id;
#ifdef CONFIG_COMPAT
void *sigpage;
#endif
void *vdso;
unsigned long flags;
} mm_context_t;
Expand Down
2 changes: 0 additions & 2 deletions arch/arm64/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ $(obj)/%.stub.o: $(obj)/%.o FORCE

obj-$(CONFIG_COMPAT) += sys32.o signal32.o \
sys_compat.o
ifneq ($(CONFIG_COMPAT_VDSO), y)
obj-$(CONFIG_COMPAT) += sigreturn32.o
endif
obj-$(CONFIG_KUSER_HELPERS) += kuser32.o
obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o
obj-$(CONFIG_MODULES) += module.o
Expand Down
2 changes: 2 additions & 0 deletions arch/arm64/kernel/cpu_errata.c
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,8 @@ static const struct midr_range arm64_ssb_cpus[] = {
MIDR_ALL_VERSIONS(MIDR_CORTEX_A53),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A55),
MIDR_ALL_VERSIONS(MIDR_BRAHMA_B53),
MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_3XX_SILVER),
MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_4XX_SILVER),
{},
};

Expand Down
2 changes: 2 additions & 0 deletions arch/arm64/kernel/cpufeature.c
Original file line number Diff line number Diff line change
Expand Up @@ -1290,6 +1290,8 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
MIDR_ALL_VERSIONS(MIDR_CORTEX_A73),
MIDR_ALL_VERSIONS(MIDR_HISI_TSV110),
MIDR_ALL_VERSIONS(MIDR_NVIDIA_CARMEL),
MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_3XX_SILVER),
MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_4XX_SILVER),
{ /* sentinel */ }
};
char const *str = "kpti command line option";
Expand Down
25 changes: 22 additions & 3 deletions arch/arm64/kernel/perf_regs.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,34 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
return 0;

/*
* Compat (i.e. 32 bit) mode:
* - PC has been set in the pt_regs struct in kernel_entry,
* - Handle SP and LR here.
* Our handling of compat tasks (PERF_SAMPLE_REGS_ABI_32) is weird, but
* we're stuck with it for ABI compatability reasons.
*
* For a 32-bit consumer inspecting a 32-bit task, then it will look at
* the first 16 registers (see arch/arm/include/uapi/asm/perf_regs.h).
* These correspond directly to a prefix of the registers saved in our
* 'struct pt_regs', with the exception of the PC, so we copy that down
* (x15 corresponds to SP_hyp in the architecture).
*
* So far, so good.
*
* The oddity arises when a 64-bit consumer looks at a 32-bit task and
* asks for registers beyond PERF_REG_ARM_MAX. In this case, we return
* SP_usr, LR_usr and PC in the positions where the AArch64 SP, LR and
* PC registers would normally live. The initial idea was to allow a
* 64-bit unwinder to unwind a 32-bit task and, although it's not clear
* how well that works in practice, somebody might be relying on it.
*
* At the time we make a sample, we don't know whether the consumer is
* 32-bit or 64-bit, so we have to cater for both possibilities.
*/
if (compat_user_mode(regs)) {
if ((u32)idx == PERF_REG_ARM64_SP)
return regs->compat_sp;
if ((u32)idx == PERF_REG_ARM64_LR)
return regs->compat_lr;
if (idx == 15)
return regs->pc;
}

if ((u32)idx == PERF_REG_ARM64_SP)
Expand Down
27 changes: 1 addition & 26 deletions arch/arm64/kernel/signal32.c
Original file line number Diff line number Diff line change
Expand Up @@ -342,38 +342,13 @@ static void compat_setup_return(struct pt_regs *regs, struct k_sigaction *ka,
retcode = ptr_to_compat(ka->sa.sa_restorer);
} else {
/* Set up sigreturn pointer */
#ifdef CONFIG_COMPAT_VDSO
void *vdso_base = current->mm->context.vdso;
void *vdso_trampoline;

if (ka->sa.sa_flags & SA_SIGINFO) {
if (thumb) {
vdso_trampoline = VDSO_SYMBOL(vdso_base,
compat_rt_sigreturn_thumb);
} else {
vdso_trampoline = VDSO_SYMBOL(vdso_base,
compat_rt_sigreturn_arm);
}
} else {
if (thumb) {
vdso_trampoline = VDSO_SYMBOL(vdso_base,
compat_sigreturn_thumb);
} else {
vdso_trampoline = VDSO_SYMBOL(vdso_base,
compat_sigreturn_arm);
}
}

retcode = ptr_to_compat(vdso_trampoline) + thumb;
#else
unsigned int idx = thumb << 1;

if (ka->sa.sa_flags & SA_SIGINFO)
idx += 3;

retcode = (unsigned long)current->mm->context.vdso +
retcode = (unsigned long)current->mm->context.sigpage +
(idx << 2) + thumb;
#endif
}

regs->regs[0] = usig;
Expand Down
61 changes: 28 additions & 33 deletions arch/arm64/kernel/vdso.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,15 +191,12 @@ enum aarch32_map {
#ifdef CONFIG_COMPAT_VDSO
AA32_MAP_VVAR,
AA32_MAP_VDSO,
#else
AA32_MAP_SIGPAGE
#endif
AA32_MAP_SIGPAGE
};

static struct page *aarch32_vectors_page __ro_after_init;
#ifndef CONFIG_COMPAT_VDSO
static struct page *aarch32_sig_page __ro_after_init;
#endif

static struct vm_special_mapping aarch32_vdso_maps[] = {
[AA32_MAP_VECTORS] = {
Expand All @@ -214,12 +211,11 @@ static struct vm_special_mapping aarch32_vdso_maps[] = {
.name = "[vdso]",
.mremap = aarch32_vdso_mremap,
},
#else
#endif /* CONFIG_COMPAT_VDSO */
[AA32_MAP_SIGPAGE] = {
.name = "[sigpage]", /* ABI */
.pages = &aarch32_sig_page,
},
#endif /* CONFIG_COMPAT_VDSO */
};

static int aarch32_alloc_kuser_vdso_page(void)
Expand All @@ -242,27 +238,11 @@ static int aarch32_alloc_kuser_vdso_page(void)
return 0;
}

#ifdef CONFIG_COMPAT_VDSO
static int __aarch32_alloc_vdso_pages(void)
{
int ret;

vdso_info[VDSO_ABI_AA32].dm = &aarch32_vdso_maps[AA32_MAP_VVAR];
vdso_info[VDSO_ABI_AA32].cm = &aarch32_vdso_maps[AA32_MAP_VDSO];

ret = __vdso_init(VDSO_ABI_AA32);
if (ret)
return ret;

return aarch32_alloc_kuser_vdso_page();
}
#else
static int __aarch32_alloc_vdso_pages(void)
static int aarch32_alloc_sigpage(void)
{
extern char __aarch32_sigret_code_start[], __aarch32_sigret_code_end[];
int sigret_sz = __aarch32_sigret_code_end - __aarch32_sigret_code_start;
unsigned long sigpage;
int ret;

sigpage = get_zeroed_page(GFP_ATOMIC);
if (!sigpage)
Expand All @@ -271,18 +251,34 @@ static int __aarch32_alloc_vdso_pages(void)
memcpy((void *)sigpage, __aarch32_sigret_code_start, sigret_sz);
aarch32_sig_page = virt_to_page(sigpage);
flush_dcache_page(aarch32_sig_page);
return 0;
}

ret = aarch32_alloc_kuser_vdso_page();
if (ret)
free_page(sigpage);
#ifdef CONFIG_COMPAT_VDSO
static int __aarch32_alloc_vdso_pages(void)
{
vdso_info[VDSO_ABI_AA32].dm = &aarch32_vdso_maps[AA32_MAP_VVAR];
vdso_info[VDSO_ABI_AA32].cm = &aarch32_vdso_maps[AA32_MAP_VDSO];

return ret;
return __vdso_init(VDSO_ABI_AA32);
}
#endif /* CONFIG_COMPAT_VDSO */

static int __init aarch32_alloc_vdso_pages(void)
{
return __aarch32_alloc_vdso_pages();
int ret;

#ifdef CONFIG_COMPAT_VDSO
ret = __aarch32_alloc_vdso_pages();
if (ret)
return ret;
#endif

ret = aarch32_alloc_sigpage();
if (ret)
return ret;

return aarch32_alloc_kuser_vdso_page();
}
arch_initcall(aarch32_alloc_vdso_pages);

Expand All @@ -305,7 +301,6 @@ static int aarch32_kuser_helpers_setup(struct mm_struct *mm)
return PTR_ERR_OR_ZERO(ret);
}

#ifndef CONFIG_COMPAT_VDSO
static int aarch32_sigreturn_setup(struct mm_struct *mm)
{
unsigned long addr;
Expand All @@ -328,12 +323,11 @@ static int aarch32_sigreturn_setup(struct mm_struct *mm)
if (IS_ERR(ret))
goto out;

mm->context.vdso = (void *)addr;
mm->context.sigpage = (void *)addr;

out:
return PTR_ERR_OR_ZERO(ret);
}
#endif /* !CONFIG_COMPAT_VDSO */

int aarch32_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{
Expand All @@ -352,10 +346,11 @@ int aarch32_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
mm,
bprm,
uses_interp);
#else
ret = aarch32_sigreturn_setup(mm);
if (ret)
goto out;
#endif /* CONFIG_COMPAT_VDSO */

ret = aarch32_sigreturn_setup(mm);
out:
mmap_write_unlock(mm);
return ret;
Expand Down
7 changes: 4 additions & 3 deletions arch/arm64/kernel/vdso/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@ btildflags-$(CONFIG_ARM64_BTI_KERNEL) += -z force-bti
# potential future proofing if we end up with internal calls to the exported
# routines, as x86 does (see 6f121e548f83 ("x86, vdso: Reimplement vdso.so
# preparation in build-time C")).
ldflags-y := -shared -nostdlib -soname=linux-vdso.so.1 --hash-style=sysv \
-Bsymbolic --eh-frame-hdr --build-id -n $(btildflags-y) -T
ldflags-y := -shared -nostdlib -soname=linux-vdso.so.1 --hash-style=sysv \
-Bsymbolic $(call ld-option, --no-eh-frame-hdr) --build-id -n \
$(btildflags-y) -T

ccflags-y := -fno-common -fno-builtin -fno-stack-protector -ffixed-x18
ccflags-y += -DDISABLE_BRANCH_PROFILING

CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS)
CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS) $(GCC_PLUGINS_CFLAGS)
KBUILD_CFLAGS += $(DISABLE_LTO)
KASAN_SANITIZE := n
UBSAN_SANITIZE := n
Expand Down
54 changes: 34 additions & 20 deletions arch/arm64/kernel/vdso/sigreturn.S
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,40 @@

.text

/*
* NOTE!!! You may notice that all of the .cfi directives in this file have
* been commented out. This is because they have been shown to trigger segfaults
* in libgcc when unwinding out of a SIGCANCEL handler to invoke pthread
* cleanup handlers during the thread cancellation dance. By omitting the
* directives, we trigger an arm64-specific fallback path in the unwinder which
* recognises the signal frame and restores many of the registers directly from
* the sigcontext. Re-enabling the cfi directives here therefore needs to be
* much more comprehensive to reduce the risk of further regressions.
*/

/* Ensure that the mysterious NOP can be associated with a function. */
.cfi_startproc
// .cfi_startproc

/*
* .cfi_signal_frame causes the corresponding Frame Description Entry in the
* .eh_frame section to be annotated as a signal frame. This allows DWARF
* unwinders (e.g. libstdc++) to implement _Unwind_GetIPInfo(), which permits
* unwinding out of the signal trampoline without the need for the mysterious
* NOP.
* .cfi_signal_frame causes the corresponding Frame Description Entry (FDE) in
* the .eh_frame section to be annotated as a signal frame. This allows DWARF
* unwinders (e.g. libstdc++) to implement _Unwind_GetIPInfo() and identify
* the next frame using the unmodified return address instead of subtracting 1,
* which may yield the wrong FDE.
*/
.cfi_signal_frame
// .cfi_signal_frame

/*
* Tell the unwinder where to locate the frame record linking back to the
* interrupted context. We don't provide unwind info for registers other
* than the frame pointer and the link register here; in practice, this
* is sufficient for unwinding in C/C++ based runtimes and the values in
* the sigcontext may have been modified by this point anyway. Debuggers
* interrupted context. We don't provide unwind info for registers other than
* the frame pointer and the link register here; in practice, this is likely to
* be insufficient for unwinding in C/C++ based runtimes, especially without a
* means to restore the stack pointer. Thankfully, unwinders and debuggers
* already have baked-in strategies for attempting to unwind out of signals.
*/
.cfi_def_cfa x29, 0
.cfi_offset x29, 0 * 8
.cfi_offset x30, 1 * 8
// .cfi_def_cfa x29, 0
// .cfi_offset x29, 0 * 8
// .cfi_offset x30, 1 * 8

/*
* This mysterious NOP is required for some unwinders (e.g. libc++) that
Expand All @@ -51,16 +62,19 @@
nop // Mysterious NOP

/*
* GDB relies on being able to identify the sigreturn instruction sequence to
* unwind from signal handlers. We cannot, therefore, use SYM_FUNC_START()
* here, as it will emit a BTI C instruction and break the unwinder. Thankfully,
* this function is only ever called from a RET and so omitting the landing pad
* is perfectly fine.
* GDB, libgcc and libunwind rely on being able to identify the sigreturn
* instruction sequence to unwind from signal handlers. We cannot, therefore,
* use SYM_FUNC_START() here, as it will emit a BTI C instruction and break the
* unwinder. Thankfully, this function is only ever called from a RET and so
* omitting the landing pad is perfectly fine.
*/
SYM_CODE_START(__kernel_rt_sigreturn)
// PLEASE DO NOT MODIFY
mov x8, #__NR_rt_sigreturn
// PLEASE DO NOT MODIFY
svc #0
.cfi_endproc
// PLEASE DO NOT MODIFY
// .cfi_endproc
SYM_CODE_END(__kernel_rt_sigreturn)

emit_aarch64_feature_1_and
1 change: 0 additions & 1 deletion arch/arm64/kernel/vdso32/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ hostprogs := $(munge)

c-obj-vdso := note.o
c-obj-vdso-gettimeofday := vgettimeofday.o
asm-obj-vdso := sigreturn.o

ifneq ($(c-gettimeofday-y),)
VDSO_CFLAGS_gettimeofday_o += -include $(c-gettimeofday-y)
Expand Down
Loading