In two cases:
* Out of memory and strdup on fName failed. Nothing would be
initialized (mostly harmless: InitCheck would detect this)
* There are no frames in the track: the wav header would be left
uninitialized, and this would be readable from userland (bad thing, but
needs a specifically crafted malicious CD to happen).
I had a KDL when trying to read an audio CD which apparently uses this
as a copy protection scheme.
I don't know if this is the right place to do this, the KDL would happen
further down when the intel partitionning system or bfs would try to
read data from the disk at offset -2048.
This looks better and is what we want here. The difference is subtle,
just a few pixels on the left and right side of the tabview where it now
properly joins the window border.
* As 104Mhz is stores as 10400 on atombios,
and 104000 everywhere else... this conversion
was going the wrong direction.
* Shrink the stored value to 10Khz units to properly
compare to the AtomBIOS value
The rightmost part of the UI actually depends on which tab is selected
on the leftside. Intercept the tab change in the Show method, and
display the correct data.
Fixes#11400.
* The menu items now only set the values for the current window without
saving,
* The settings in the preference window are persistent,
* The "save as defaults" menu item is removed.
Fixes#5030.
I already made this patch in Heidi's clone of BToolbar. Adding it here
allows me to drop Heidi's version altogether.
I also relicensed the header file at the permission of Stephan. The .cpp
file still lists him as author and copyright holder.
Signed-off-by: Jessica Hamilton <jessica.l.hamilton@gmail.com>
* The pointer mdt should point to the start of the contents of the
master data table. As defined in struct ATOM_MASTER_DATA_TABLE,
the content begins 4 bytes after the beginning of the table
(which in turn is ctx->data_table bytes from the start of the
AtomBIOS). The wrong parantheses in the cast moved the pointer
somewhere else completely.
* That this apparently worked on many cards is because the mdt
pointer in this function is used just to make sure that the
following dereference is not a NULL-pointer access.
The actual dereference is then done using the CU16() and CU8()
macros which do the casts correctly. However, it only worked when
the wrong pointer plus index lead to some byte which was, by
chance, not zero. For many chips, this was the case.
* For the AtomBIOS of a Radeon HD7850M (Heathrow Pro) it didn't work
out though and the driver couldn't parse tables. With this fix, it
now works on such chips as well.
* Also, fix the same problem in code for master command table.
VariablesView:
- Check to ensure the stack frame actually does have a function
object associated with it before attempting to use it, as this
isn't always the case.
It's now possible to configure the serial port through scripting:
hey SerialConnect set databits to 8
hey SerialConnect set parity to even
etc.
More useful is the ability to connect and disconnect from the port:
hey SerialConnect get port # returns "usb0"
hey SerialConnect set port to usb0
hey SerialConnect delete port
This allows a script to automatically disconnect SerialConnect, do
something with the serial port, and then reconnect SerialConnect. This
can be used for example to run a bootloader and update a firmware
through the same serial port used for debugging, something that's not
easily possible on other systems.
InspectorWindow:
- Inherit from Team::Listener and implement hook for thread state
change events.
- On thread state change, if the new state is stopped, and we have
an active block, release it, and ask to re-inspect.
- Factor out helper function for updating the active block.
- Always ensure the MemoryView is updated when we change blocks.
MemoryView:
- Clean up acquisition of target memory block.
This ensures that the block data is kept up to date when stepping
through code with an inspector window open.
Team:
- Remove expression evaluation event / listener hook. This doesn't
really belong to the Team anyways.
UserInterfaceListener:
- ExpressionEvaluationRequested() now takes an ExpressionInfo object
rather than the individual subcomponents.
ExpressionEvaluationJob:
- Notification of expression evaluation completion is now handled
via the info object's listener interface rather than the Team.
Others:
- Adjust all users of expressions to set themselves up as
ExpressionInfo::Listener subclasses, and consequently add themselves
to the respective info object when requesting evaluation. This
significantly simplifies various things, and also ensures that no
one accidentally gets notified of an expression they didn't actually
ask for, which could occur with the previous Team-based listener
interface. Make all other required adjustments for new interface
usage.
No functional change intended.
VariablesView:
- The view now keeps a mapping of a list of expressions associated
with functions.
- Add actions for adding/removing expressions to variables context menu.
- When setting up to show a new stack frame, also add corresponding expression
nodes and request their evaluation.
- Extend VariablesView::Listener interface to also encompass expression
evaluation requests.
- Don't add context actions for expression nodes.
TeamWindow:
- Implement VariablesView::Listener expression evaluation hook and forward
responses along.