Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Robert Finch <robfi680@gmail.com> |
|---|---|
| Newsgroups | comp.arch |
| Subject | Re: Constant Stack Canaries |
| Date | 2025-04-01 18:19 -0400 |
| Organization | A noiseless patient Spider |
| Message-ID | <vshoop$3sqf$2@dont-email.me> (permalink) |
| References | (5 earlier) <e05e9d429f71944bbfe74c3f54b79a03@www.novabbs.org> <vseojq$112f7$1@dont-email.me> <62b5c4a25d917c5bab64a815189de826@www.novabbs.org> <vsfrqk$28q7o$1@dont-email.me> <vshlfk$32p7$1@dont-email.me> |
On 2025-04-01 5:21 p.m., BGB wrote: > On 3/31/2025 11:58 PM, Robert Finch wrote: >> On 2025-03-31 4:52 p.m., MitchAlsup1 wrote: >>> On Mon, 31 Mar 2025 18:56:32 +0000, BGB wrote: >>> >>>> On 3/31/2025 1:07 PM, MitchAlsup1 wrote: >>> ------------- >>>>>> Another option being if it could be a feature of a Load/Store >>>>>> Multiple. >>>>>> >>>>>> Say, LDM/STM: >>>>>> 6b Hi (Upper bound of register to save) >>>>>> 6b Lo (Lower bound of registers to save) >>>>>> 1b LR (Flag to save Link Register) >>>>>> 1b GP (Flag to save Global Pointer) >>>>>> 1b SK (Flag to generate a canary) >> >> Q+3 uses a bitmap of register selection with four more bits selecting >> overlapping groups. It can work with up to 17 registers. >> > > OK. > > If I did LDM/STM style ops, not sure which strategy I would take. > > The possibility of using a 96-bit encoding with an Imm64 holding a bit- > mask of all the registers makes some sense... > > >>>>> >>>>> ENTER and EXIT have 2 of those flags--but also note use of SP and CSP >>>>> are implicit. >>>>> >>>>>> Likely (STM): >>>>>> Pushes LR first (if bit set); >>>>>> Pushes GP second (if bit set); >>>>>> Pushes registers in range (if Hi>=Lo); >>>>>> Pushes stack canary (if bit set). >>>>> >>>>> EXIT uses its 3rd flag used when doing longjump() and THROW() >>>>> so as to pop the call-stack but not actually RET from the stack >>>>> walker. >>>>> >>>> >>>> OK. >>>> >>>> I guess one could debate whether an LDM could treat the Load-LR as >>>> "Load >>>> LR" or "Load address and Branch", and/or have separate flags (Load >>>> LR vs >>>> Load PC, with Load PC meaning to branch). >>>> >>>> >>>> Other ABIs may not have as much reason to save/restore the Global >>>> Pointer all the time. But, in my case, it is being used as the primary >>>> way of accessing globals, and each binary image has its own address >>>> range here. >>> >>> I use constants to access globals. >>> These comes in 32-bit and 64-bit flavors. >>> >>>> PC-Rel not being used as PC-Rel doesn't allow for multiple process >>>> instances of a given loaded binary within a shared address space. >>> >>> As long as the relative distance is the same, it does. >>> >>>> Vs, say, for PIE ELF binaries where it is needed to load a new copy for >>>> each process instance because of this (well, excluding an FDPIC style >>>> ABI, but seemingly still no one seems to have bothered adding FDPIC >>>> support in GCC or friends for RV64 based targets, ...). >>>> >>>> Well, granted, because Linux and similar tend to load every new process >>>> into its own address space and/or use CoW. >>> >>> CoW and execl() >>> >>> -------------- >>>>>> Other ISAs use a flag bit for each register, but this is less viable >>>>>> with an ISA with a larger number of registers, well, unless one >>>>>> uses a >>>>>> 64 or 96 bit LDM/STM encoding (possible). Merit though would be not >>>>>> needing multiple LDM's / STM's to deal with a discontinuous register >>>>>> range. >>>>> >>>>> To quote Trevor Smith:: "Why would anyone want to do that" ?? >>>>> >>>> >>>> Discontinuous register ranges: >>>> Because pretty much no ABI's put all of the callee save registers in a >>>> contiguous range. >>>> >>>> Granted, I guess if someone were designing an ISA and ABI clean, they >>>> could make all of the argument registers and callee save registers >>>> contiguous. >>>> >>>> Say: >>>> R0..R3: Special >>>> R4..R15: Scratch >>>> R16..R31: Argument >>>> R32..R63: Callee Save >>>> .... >>>> >>>> But, invariably, someone will want "compressed" instructions with a >>>> subset of the registers, and one can't just have these only having >>>> access to argument registers. >>> >>> Brian had little trouble using My 66000 ABI which does have contiguous >>> register groupings. >>> >>>>>> Well, also excluding the possibility where the LDM/STM is essentially >>>>>> just a function call (say, if beyond certain number of registers >>>>>> are to >>>>>> be saved/restored, the compiler generates a call to a save/restore >>>>>> sequence, which is also generates as-needed). Granted, this is >>>>>> basically >>>>>> the strategy used by BGBCC. If multiple functions happen to save/ >>>>>> restore >>>>>> the same combination of registers, they get to reuse the prior >>>>>> function's save/restore sequence (generally folded off to before the >>>>>> function in question). >>>>> >>>>> Calling a subroutine to perform epilogues is adding to the number of >>>>> branches a program executes. Having an instruction like EXIT means >>>>> when you know you need to exit, you EXIT you don't branch to the exit >>>>> point. Saving instructions. >>>>> >>>> >>>> Prolog needs a call, but epilog can just be a branch, since no need to >>>> return back into the function that is returning. >>> >>> Yes, but this means My 66000 executes 3 fewer transfers of control >>> per subroutine than you do. And taken branches add latency. >>> >>>> Needs to have a lower limit though, as it is not worth it to use a >>>> call/branch to save/restore 3 or 4 registers... >>>> >>>> But, say, 20 registers, it is more worthwhile. >>> >>> ENTER saves as few as 1 or as many as 32 and remains that 1 single >>> instruction. Same for EXIT and exit also performs the RET when LDing >>> R0. >>> >>>> >>>>>> Granted, the folding strategy can still do canary values, but >>>>>> doing so >>>>>> in the reused portions would limit the range of unique canary values >>>>>> (well, unless the canary magic is XOR'ed with SP or something...). >>>>>> >>> Canary values are in addition to ENTER and EXIT not part of them >>> IMHO. >> >> In Q+3 there are push and pop multiple instructions. I did not want to >> add load and store multiple on top of that. They work great for ISRs, >> but not so great for task switching code. I have the instructions >> pushing or popping up to 17 registers in a group. Groups of registers >> overlap by eight. The instructions can handle all 96 registers in the >> machine. ENTER and EXIT are also present. >> >> It is looking like the context switch code for the OS will take about >> 3000 clock cycles to run. Not wanting to disable interrupts for that >> long, I put a spinlock on the system’s task control block array. But I >> think I have run into an issue. It is the timer ISR that switches >> tasks. Since it is an ISR it pushes a subset of registers that it uses >> and restores them at exit. But when exiting and switching tasks it >> spinlocks on the task control block array. I am not sure this is a >> good thing. As the timer IRQ is fairly high priority. If something >> else locked the TCB array it would deadlock. I guess the context >> switching could be deferred until the app requests some other >> operating system function. But then the issue is what if the app gets >> stuck in an infinite loop, not calling the OS? I suppose I could make >> an OS heartbeat function call a requirement of apps. If the app does >> not do a heartbeat within a reasonable time, it could be terminated. >> >> Q+3 progresses rapidly. A lot of the stuff in earlier versions was >> removed. The pared down version is a 32-bit machine. Expecting some >> headaches because of the use of condition registers and branch registers. >> > > OK. > > Ironically, I seem to have comparably low task-switch cost... > However, each system call is essentially 2 task switches, and it is > still slow enough to negatively effect performance if they happen at all > frequently. > System calls for Q+ are slightly faster (but not much) than task switches. I just have the system saving state on the stack. I don't bother saving the FP registers or some of the other system registers that the OS controls. So, it is a little bit shorter than the task switch code. The only thing that can do a task switch in the system is the time-slicer. > So, say, one needs to try to minimize the number of unnecessary system > calls (say, don't implement "fputs()" by sending 1 byte at a time, ...). > > > > > > Unlike on a modern PC, one generally needs to care more about efficiency. > > Hence, all the fiddling with low bit-depth graphics formats, and things > like my recent fiddling with 2-bit ADPCM audio. > > And, online, one is (if anything) more likely to find people complaining > about how old/obsolescent ADPCM is (and/or arguing that people should > store all their sound effects as Ogg/Vorbis or similar; ...). > > Im not one much for music, although I play the tunes ocassionally. I'm little hard of hearing. > > Then again, I did note that I may need to find some other "quality > metric" for audio, as RMSE isn't really working... > > At least going by RMSE, the "best" option would be to use 8-bit PCM and > then downsample it. > > Say, 4kHz 8-bit PCM has a lower RMSE score than 2-bit ADPCM, but > subjectively the 2-bit ADPCM sounds significantly better. > > Say: for 16kHz, and a test file (using a song here): > PCM8, 16kHz : 121 (128 kbps) > A-Law, 16kHz : 284 (128 kbps) > IMA 4bit, 16kHz : 617 (64 kbps) > IMA 2bit, 16kHz : 1692 (32 kbps, *) > ADLQ 2bit, 16kHz: 2000 (32 kbps) > PCM8, 4kHz : 242 (32 kbps) > > However, 4kHz PCM8 sounds terrible vs either 2-bit IMA or ADLQ. > Basically sounds muffled, speech is unintelligible. > But, it would be the "best" option if going solely by RMSE. > > Also A-Law sounds better than PCM8 (at the same sample rate). > Even with the higher RMSE score. > > Seems like it could be possible to do RMSE on A-Law samples as a metric, > but if anything this is just kicking the can down the road slightly. > > Granted, A-Law sounds better than 4-bit IMA, and 4-bit IMA sounds better > than the 2-bit ADPCM's at least... > > > *: Previously it was worse, around 4500, but the RMSE score dropped > after switching it to using a similar encoder strategy to ADLQ, namely > doing a brute-force search over the next 3 samples to find the values > that best approximate the target samples. > > Though, which is "better", or whether or not even lower RMSE "improves" > quality here, is debatable (the PCM8 numbers clearly throw using RMSE as > a quality metric into question for this case). > > Ideally I would want some metric that better reflects hearing perception > and is computationally cheap. > > ... >
Back to comp.arch | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-03-30 08:16 -0400
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-03-30 12:47 -0500
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-03-30 20:14 +0000
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-03-30 21:26 -0400
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-03-31 01:34 -0500
Re: Constant Stack Canaries Stephen Fuld <sfuld@alumni.cmu.edu.invalid> - 2025-03-31 09:04 -0700
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-03-31 12:17 -0500
Re: Constant Stack Canaries Stephen Fuld <sfuld@alumni.cmu.edu.invalid> - 2025-03-31 10:57 -0700
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-03-31 18:07 +0000
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-03-31 13:56 -0500
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-03-31 20:52 +0000
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-04-01 00:58 -0400
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-01 18:51 +0000
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-04-01 18:06 -0400
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-01 23:24 +0000
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-04-01 20:07 -0400
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-02 01:47 +0000
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-04 21:07 +0000
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-04-01 16:21 -0500
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-04-01 18:19 -0400
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-04-01 23:04 -0500
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-04-01 14:34 -0500
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-01 23:21 +0000
Re: Constant Stack Canaries Stefan Monnier <monnier@iro.umontreal.ca> - 2025-04-01 22:55 -0400
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-04-01 23:19 -0500
Re: Constant Stack Canaries Stefan Monnier <monnier@iro.umontreal.ca> - 2025-04-03 10:09 -0400
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-04-03 12:22 -0500
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-04-03 23:49 -0400
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-04-04 12:41 -0500
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-04 21:13 +0000
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-04-04 23:45 -0400
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-05 16:37 +0000
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-05 18:31 +0000
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-04-05 17:57 -0400
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-05 23:11 +0000
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-06 14:21 +0000
Re: Constant Stack Canaries Robert Finch <robfi680@gmail.com> - 2025-04-06 15:01 -0400
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-07 14:04 +0000
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-05 23:06 +0000
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-06 14:32 +0000
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-07 00:51 +0000
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-07 14:09 +0000
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-09 00:23 +0000
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-15 00:43 +0000
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-15 14:02 +0000
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-15 20:46 +0000
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-16 14:07 +0000
Re: Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-16 21:13 +0000
Virtualization layers (was: Constant Stack Canaries) Stefan Monnier <monnier@iro.umontreal.ca> - 2025-04-16 17:48 -0400
Re: Virtualization layers mitchalsup@aol.com (MitchAlsup1) - 2025-04-16 22:12 +0000
Re: Virtualization layers (was: Constant Stack Canaries) scott@slp53.sl.home (Scott Lurndal) - 2025-04-17 00:49 +0000
Re: Constant Stack Canaries Stephen Fuld <sfuld@alumni.cmu.edu.invalid> - 2025-04-16 15:26 -0700
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-17 00:57 +0000
Re: virtualization, Constant Stack Canaries John Levine <johnl@taugh.com> - 2025-04-17 01:04 +0000
Re: virtualization, Constant Stack Canaries Stefan Monnier <monnier@iro.umontreal.ca> - 2025-04-16 21:07 -0400
Re: virtualization, Constant Stack Canaries Stephen Fuld <sfuld@alumni.cmu.edu.invalid> - 2025-04-16 23:30 -0700
Re: virtualization, Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-17 13:32 +0000
Re: virtualization, Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-17 18:22 +0000
Re: virtualization, Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-17 20:10 +0000
Re: virtualization, Constant Stack Canaries mitchalsup@aol.com (MitchAlsup1) - 2025-04-17 21:45 +0000
Re: Constant Stack Canaries scott@slp53.sl.home (Scott Lurndal) - 2025-04-17 00:47 +0000
Re: Constant Stack Canaries BGB <cr88192@gmail.com> - 2025-04-02 00:43 -0500
csiph-web