> On Sep 17, 2015, at 5:52 PM, Jay Jaeger <[email protected]> wrote:
>
> On 9/17/2015 2:27 PM, Paul Koning wrote:
>>
>>> On Sep 17, 2015, at 2:56 PM, dwight <[email protected]> wrote:
>>>
>>> What is the definition of self modifying?
>>> Is it changing an instruction to execute in the thread to be run?
>>> How about adding or subtracting something to be done in an execution
>>> queue?
>>
>> I'm not sure if there is a universally agreed to definition.
>>
>> It also matters why the question is asked. I can think of a couple of
>> answers:
>>
>> 1. the contents of instruction memory is subject to change.
>>
>> 2. the contents of instruction memory is subject to change during execution
>> of the program.
>>
>> 3. individual instructions in a program are changed by the execution of that
>> program.
>>
>> 4. individual instructions in a program are changed by explicit data
>> manipulation actions of that program.
>>
>> #1 is true for most computers past and present, because they allow a program
>> to be loaded into memory from external storage.
>>
>> #2 is true in any program that uses overlays, or if the program is
>> controlled by a debugger that uses "software breakpoints".
>
> Don't / didn't some machines do/did this by setting an address trap
> register rather than modifying the breakpointed instruction?
Yes, that's why I said "software breakpoints", meaning breakpoints created by
replacing the instruction with a break instruction, as opposed to "hardware
breakpoints" which use address trap instructions. Perhaps that's not universal
terminology, but it's what GDB calls these things.
>
> Also, if the machine had explicit handling of overlays/segments, then
> that part of this becomes identical to #1. (Burroughs?)
Or it's outside the picture entirely. I was thinking of virtual address space
here. If you have paging or the like with physically addressed caches, then
those are part of #1, yes.
paul