diff options
author | Otavio Salvador <otavio@ossystems.com.br> | 2016-12-17 09:26:18 -0200 |
---|---|---|
committer | Otavio Salvador <otavio@ossystems.com.br> | 2016-12-17 09:26:18 -0200 |
commit | 80e3b3c3c85a3a8b70ef6403bc806901628c7446 (patch) | |
tree | c52029ec448da3d406bdd307413535cd1ad3c570 /Documentation | |
parent | 176c482f56cd9c523829ceb6bce5c28d3cc6d1c0 (diff) | |
parent | 8576fa45c10e665bb72931a31461c7310f3c5494 (diff) |
Merge tag 'v4.1.36' into 4.1-2.0.x-imx
Linux 4.1.36
* tag 'v4.1.36': (72 commits)
Linux 4.1.36
kbuild: add -fno-PIE
firewire: net: fix fragmented datagram_size off-by-one
firewire: net: guard against rx buffer overflows
parisc: Ensure consistent state when switching to kernel stack at syscall entry
ovl: fsync after copy-up
virtio: console: Unlock vqs while freeing buffers
md: be careful not lot leak internal curr_resync value into metadata. -- (all)
md: sync sync_completed has correct value as recovery finishes.
scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware
scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded
drm/radeon/si_dpm: workaround for SI kickers
drm/dp/mst: Check peer device type before attempting EDID read
drm/dp/mst: add some defines for logical/physical ports
drm/dp/mst: Clear port->pdt when tearing down the i2c adapter
KVM: MIPS: Precalculate MMIO load resume PC
KVM: MIPS: Make ERET handle ERL before EXL
drm/radeon: drop register readback in cayman_cp_int_cntl_setup
scsi: megaraid_sas: Fix data integrity failure for JBOD (passthrough) devices
Revert "drm/radeon: fix DP link training issue with second 4K monitor"
...
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/x86/exception-tables.txt | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Documentation/x86/exception-tables.txt b/Documentation/x86/exception-tables.txt index 32901aa36f0a..e396bcd8d830 100644 --- a/Documentation/x86/exception-tables.txt +++ b/Documentation/x86/exception-tables.txt @@ -290,3 +290,38 @@ Due to the way that the exception table is built and needs to be ordered, only use exceptions for code in the .text section. Any other section will cause the exception table to not be sorted correctly, and the exceptions will fail. + +Things changed when 64-bit support was added to x86 Linux. Rather than +double the size of the exception table by expanding the two entries +from 32-bits to 64 bits, a clever trick was used to store addresses +as relative offsets from the table itself. The assembly code changed +from: + .long 1b,3b +to: + .long (from) - . + .long (to) - . + +and the C-code that uses these values converts back to absolute addresses +like this: + + ex_insn_addr(const struct exception_table_entry *x) + { + return (unsigned long)&x->insn + x->insn; + } + +In v4.6 the exception table entry was expanded with a new field "handler". +This is also 32-bits wide and contains a third relative function +pointer which points to one of: + +1) int ex_handler_default(const struct exception_table_entry *fixup) + This is legacy case that just jumps to the fixup code +2) int ex_handler_fault(const struct exception_table_entry *fixup) + This case provides the fault number of the trap that occurred at + entry->insn. It is used to distinguish page faults from machine + check. +3) int ex_handler_ext(const struct exception_table_entry *fixup) + This case is used for uaccess_err ... we need to set a flag + in the task structure. Before the handler functions existed this + case was handled by adding a large offset to the fixup to tag + it as special. +More functions can easily be added. |